package PuntoVentaDAOS;

import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import PuntoVentaDTOS.ArticuloVentaDTO;
import PuntoVentaDTOS.PerfilArticuloDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author AlanGR
 */
public class ArticulosVentaDAO {

    private PasarelaDatos db;
    private ResultSets results;

    public ArticulosVentaDAO() {
        db = new PasarelaDatos();
        results = new ResultSets();
    }

    /**
     * ALAN GONZALEZ ARTICULOS QUE FORMAN LA COMPRA DE UN CLIENTE
     *
     * @return
     */
    public Vector articulosCompra(int idUsuario) {
        Vector items = new Vector();
        db.openDatabase();
        String sql = "select * from articulos_venta where articulos_venta.usuario_caja = " + idUsuario;
        ResultSet rst = db.executeQuery(sql);
        try {
            while (rst.next()) {
                ArticuloVentaDTO a = new ArticuloVentaDTO();
                a = results.articuloVentaDTO(rst);
                items.add(a);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ArticulosVentaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return items;
    }

    /**
     * ALAN GONZALEZ INGRESA UN ARTICULO A LA LISTA DE LOS ARTICULOS DE LA
     * COMPRA DEL CLIENTE
     */
    public void registraArticuloVenta(PerfilArticuloDTO perfil, double cantidad, int idUsuario) {
        db.openDatabase();
        String sql = "";
        sql += " insert into articulos_venta SET ";
        sql += " articulos_venta.cb = '" + perfil.getCb() + "' ";
        sql += " ,articulos_venta.descripcion = '" + perfil.getDescripcion() + "'";
        sql += " ,articulos_venta.precio_publico = " + perfil.getPrecioPublico();
        sql += " ,articulos_venta.cantidad = " + cantidad;
// PROCESO DE CALCULO PARA LA VENTA DE ARTICULOS DESPACHADOS EN PIEZA
        sql += " ,articulos_venta.sub_total = " + (perfil.getPrecioPublico() * cantidad);
        sql += " ,articulos_venta.usuario_caja =" + idUsuario; // ME PERMITE UTILIZAR EL SISTEMA EN VARIAS CAJAS CON LA MISMA BASE DE DATOS
        db.execute(sql);
        db.closeDatabase();
    }

    /**
     * AGREGA LA VENTA DE UN GRANEL
     *
     * @param perfil
     */
    public void registraArticuloGranelVenta(PerfilArticuloDTO perfil, int idUsuario) {
        db.openDatabase();
        String sql = "";
        sql += " insert into articulos_venta SET ";
        sql += " articulos_venta.cb = '" + perfil.getCb() + "' ";
        sql += " ,articulos_venta.descripcion = '" + perfil.getDescripcion() + "'";
        sql += " ,articulos_venta.precio_publico = " + perfil.getPrecioPublico();
        sql += " ,articulos_venta.cantidad = " + perfil.getCantidadVentaGranel();
        sql += " ,articulos_venta.sub_total = " + perfil.getSubtotalVentaGranel();
        sql += " ,articulos_venta.usuario_caja = " + idUsuario;
        db.execute(sql);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ ESTE METODO COMPRUEBA SIN UN PRODUCTO SE ENCUENTRA
     * REGISTRADO DENTRO DEL CATALOGO GENERAL
     *
     * @param cb
     * @return
     */
    public boolean productoEnCatalogo(String cb) {
        boolean bandera = new Boolean(null);
        String sql = "select * from catalogo where catalogo.`cb` = '" + cb + "'";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            if (rst.next()) {
                bandera = true;
            } else {
                bandera = false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(ArticulosVentaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return bandera;
    }

    /**
     * ALAN GONZALEZ OBTIENE LA EXISTENCIA ACTUAL DE UN PRODUCTO
     *
     * @param cb
     * @return
     */
    public double existenciaProducto(String cb) {
        double ext = 0.0;
        db.openDatabase();
        String sql = "select catalogo.`existencia_neta` as existencia  from catalogo where catalogo.`cb` = '" + cb + "'";
        ResultSet rst = db.executeQuery(sql);
        try {
            if (rst.next()) {
                ext = rst.getDouble("existencia");
            } else {
                ext = 0.0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(ArticulosVentaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return ext;
    }

    /**
     * ALAN GONZALES METODO QUE DEVUELVE UN PERFIL COMPLERO DEL PRODUCTO
     * MEDIANTE CODIGO DE BARRAS
     *
     * @param cb
     * @return
     */
    public PerfilArticuloDTO perfilArticulo(String cb) {
        PerfilArticuloDTO perfil = new PerfilArticuloDTO();
        String sql = "select * from catalogo where catalogo.cb = '" + cb + "'";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            if (rst.next()) {
                perfil = results.perfilArticuloDTO(rst);
            } else {
                perfil = null;
            }
        } catch (SQLException ex) {
            Logger.getLogger(ArticulosVentaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return perfil;
    }

    /**
     *
     * @return
     */
    public double totalVenta(int idCaja) {
        double totalVenta = 0.0;
        String sql
                = "SELECT SUM(articulos_venta.`sub_total`) as totalventa FROM  articulos_venta  where articulos_venta.usuario_caja = " + idCaja;
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            if (rst.next()) {
                totalVenta = rst.getDouble("totalventa");
            } else {
                totalVenta = 0.0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(ArticulosVentaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return totalVenta;
    }

    /**
     * ALAN GONZALEZ ESTE METODO CANCELA UN ARTICULO DE LA VENTA EN CURSO
     *
     * @param id
     */
    public void cancelaArticuloVenta(int id) {
        db.openDatabase();
        String sql = "delete  from articulos_venta where articulos_venta.id =" + id;
        db.execute(sql);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ TRUNCA LA TABLA DE ARTICULOS DE CLIENTE
     */
    public void reiniciaArticulosVenta(int idUsuario) {
        db.openDatabase();
        String sql = " delete from articulos_venta where articulos_venta.usuario_caja = " + idUsuario;
        db.execute(sql);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ
     *
     * @param cb
     * @return
     */
    public int numeroPiezasVentaCB(String cb) {
        int piezas = 0;
        String sql = "select count(*) as total from articulos_venta where articulos_venta.cb = '" + cb + "'";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            if (rst.next()) {
                piezas = rst.getInt("total");
            } else {
                piezas = 0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(ArticulosVentaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return piezas;
    }

}
